/**
 * 分类控制器
 * 处理分类相关的HTTP请求
 */
const categoryService = require('../services/categoryService');
const ApiResponse = require('../utils/response');

class CategoryController {
  /**
   * 获取分类列表
   * @param {Object} req - Express请求对象
   * @param {Object} res - Express响应对象
   * @param {Function} next - Express下一个中间件函数
   */
  async getCategories(req, res, next) {
    try {
      const userId = req.user.id;
      
      // 调用服务层获取分类列表
      const categories = await categoryService.getCategories(userId);
      
      // 返回成功响应
      res.json(ApiResponse.success(categories));
    } catch (error) {
      // 错误交给全局错误处理中间件
      next(error);
    }
  }
  
  /**
   * 创建分类
   * @param {Object} req - Express请求对象
   * @param {Object} res - Express响应对象
   * @param {Function} next - Express下一个中间件函数
   */
  async createCategory(req, res, next) {
    try {
      const { name, icon, bgClass } = req.body;
      
      // 验证请求参数
      if (!name) {
        return res.status(400).json(ApiResponse.paramError('分类名称不能为空'));
      }
      
      // 调用服务层创建分类
      const category = await categoryService.createCategory({
        name,
        icon,
        bgClass
      });
      
      // 返回成功响应
      res.status(201).json(ApiResponse.success(category, '创建分类成功'));
    } catch (error) {
      // 错误交给全局错误处理中间件
      next(error);
    }
  }
  
  /**
   * 更新分类
   * @param {Object} req - Express请求对象
   * @param {Object} res - Express响应对象
   * @param {Function} next - Express下一个中间件函数
   */
  async updateCategory(req, res, next) {
    try {
      const userId = req.user.id;
      const categoryId = parseInt(req.params.id);
      const { name, icon, bgClass } = req.body;
      
      // 验证请求参数
      if (!categoryId) {
        return res.status(400).json(ApiResponse.paramError('分类ID不能为空'));
      }
      
      if (!name) {
        return res.status(400).json(ApiResponse.paramError('分类名称不能为空'));
      }
      
      // 调用服务层更新分类
      const category = await categoryService.updateCategory(categoryId, userId, {
        name,
        icon,
        bgClass
      });
      
      // 返回成功响应
      res.json(ApiResponse.success(category, '更新分类成功'));
    } catch (error) {
      // 处理特定错误
      if (error.message === '分类不存在') {
        return res.status(404).json(ApiResponse.error('404', error.message));
      }
      
      // 其他错误交给全局错误处理中间件
      next(error);
    }
  }
  
  /**
   * 删除分类
   * @param {Object} req - Express请求对象
   * @param {Object} res - Express响应对象
   * @param {Function} next - Express下一个中间件函数
   */
  async deleteCategory(req, res, next) {
    try {
      const categoryId = parseInt(req.params.id);
      
      // 验证请求参数
      if (!categoryId) {
        return res.status(400).json(ApiResponse.paramError('分类ID不能为空'));
      }
      
      // 调用服务层删除分类
      await categoryService.deleteCategory(categoryId);
      
      // 返回成功响应
      res.json(ApiResponse.success(null, '删除分类成功'));
    } catch (error) {
      // 处理特定错误
      if (error.message === '分类不存在') {
        return res.status(404).json(ApiResponse.error('404', error.message));
      }
      
      // 其他错误交给全局错误处理中间件
      next(error);
    }
  }
}

module.exports = new CategoryController();